package com.ruoyi.web.controller.cpsp;
/*
    @author neu.xiangwenjuan
    @create 2024/5/25
*/

import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.cpsp.mapper.DepartmentMapper;
import com.ruoyi.cpsp.mapper.SysUserInfoMapper;
import com.ruoyi.cpsp.service.DepartmentUserService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.*;
import java.util.UUID;

@CrossOrigin
@RestController
@RequestMapping("/cpsp/departmentUser")
public class DepartmentUsetController {

    @Autowired
    private DepartmentUserService departmentUserService;

    @Autowired
    private SysUserInfoMapper userInfoMapper;

    @Autowired
    private DepartmentMapper departmentMapper;


    /**
     *  不需要传入参数
     * @return 返回类型是SysUserInfo类的集合，会返回很多内容，只需要显示下面四列，以及最后一列操作：(删除)按钮
     *  前端显示列：
     *  1.部门名： 对应nickName
     *  2.用户名： 对应userName
     *  3.邮件： 对应email
     *  4.电话： 对应phonenumber
     */
    @ApiOperation("获取所有用户的基本信息，包括部门名，用户名，密码，电话，邮箱")
    @RequestMapping(value = "/getAllDepartmentUserInfo", method = RequestMethod.GET)
    @ResponseBody
    private AjaxResult getAllDepartmentUserInfo() {
        return AjaxResult.success(departmentUserService.getAllDepartmentUserInfo());
    }


    /**
     *  先别测试
     *  点击删除的时候，把上一个接口返回的user_id和dept_id返回给后端
     * @param userId
     * @param deptId
     * @return
     */
    @ApiOperation("删除某个部门的信息")
    @RequestMapping(value = "/deleteDepartmentUserInfo", method = RequestMethod.POST)
    @ResponseBody
    private AjaxResult deleteDepartmentUserInfo(@RequestParam Integer userId,
                                                @RequestParam Integer deptId) {
        // 根据deptId找到department的数据，然后删除
        if (departmentUserService.deleteDepartmentUser(userId, deptId) > 0) {
            return AjaxResult.success("部门成功删除！");
        } else {
            return AjaxResult.error("部门删除失败！");
        }
    }


    /**
     * 先别测试
     * @param departmentName
     * @param userName （加提示，必须是字母）
     * @param password （前端设置限制：位数在3到8位之间）
     * @param tel （加限制11位）
     * @param email （加限制，搜搜网上对邮件如何限制）
     * @return
     */
    @ApiOperation("添加部门")
    @RequestMapping(value = "/insertDepartmentUserInfo", method = RequestMethod.POST)
    @ResponseBody
    private AjaxResult insertDepartmentUserInfo(@RequestParam String departmentName,
                                                @RequestParam String userName,
                                                @RequestParam String password,
                                                @RequestParam String tel,
                                                @RequestParam String email) {
        // 生成UUID，作为department_id。
        String departmentId = UUID.randomUUID().toString().replace("-", "");
        // 可以把部门名字+部门id插入到department表中
        // 生成加密的password
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        // 加密后的字符串
        String enPassword = passwordEncoder.encode(password);
        if (departmentUserService.insertDepartmentUser(departmentName, departmentId, userName, enPassword, tel, email) > 0) {
            return AjaxResult.success("部门添加成功！");
        } else {
            return AjaxResult.error("部门添加失败！");
        }
    }

    /**
     *  这个接口与上面三个接口不同，是只有部门用户才可以看到的
     *  与第一个接口一样返回SysUserInfo的列表
     *  只显示两列：
     *  1.部门名字：对应nickName
     *  2.电话号码：对应phonenumber
     *  只需要显示这两列，是为了给部门提供一个联系方式
     * @return
     */
    @ApiOperation("获取部门电话信息")
    @RequestMapping(value = "/selectDepartmentInfo", method = RequestMethod.GET)
    @ResponseBody
    private AjaxResult selectDepartmentInfo() {
        return AjaxResult.success(departmentUserService.getAllDepartmentUserInfo());
    }
}
